﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.SqlClient; //skal bruges til database
using System.Data;

namespace Controller
{
    public class ClsDBController
    {
        SqlConnection connect;
        SqlCommand command;
        ClsSystemController controller;
        string connectionString;

        public ClsDBController(ClsSystemController wilkeController)
        {
            controller = wilkeController;
            connectionString = @"DATA Source=195.181.8.201;Initial Catalog=WilkeGruppe6a;user Id=sa;password=Cisco2011";  // valg af database

            connect = new SqlConnection(connectionString);
            command = new SqlCommand();
            command.Connection = connect;
            command.CommandType = CommandType.StoredProcedure;
        }

        public void Behandelfejl(int fejlID)
        {
            command.CommandText = "BehandleFejl"; // stored procedure   
            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget

            // indsæt værdier i database
            SqlParameter par = new SqlParameter("@fejlID", SqlDbType.Int);
            par.Value = fejlID;
            command.Parameters.Add(par);

            try
            {
                connect.Open(); // åben forbindelse til database
                command.ExecuteNonQuery(); //udfør kaldet - der skal ikke sendes data tilbage fra databasen 
            }
            catch (SqlException ex)
            {
                throw ex; 
            }

            finally
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close(); // altid lukke connection (uanset om try/catch)
                }
            }
        }

        public void HentAlleFejl()
        {
            controller.ClearFejlListe(); // clear liste først for at undgå dobbelt data ved opdatering
            SqlDataReader datareader = null; // skal referere til indlæst data 
            string fejlType;
            string fejlStacking;
            string fejlprioritet;
            int fejlID;
            DateTime fejlDato;

            command.Parameters.Clear(); // clear for at være sikker på der ikke er noget
            command.CommandText = "HentAlleFejl"; // valg af stored procedure

            try
            {
                connect.Open();

                datareader = command.ExecuteReader(); //læs og tage data med tilbage

                while (datareader.Read())
                {
                    fejlType = datareader["fejlType"].ToString();
                    fejlStacking = datareader["fejlStacking"].ToString();
                    fejlprioritet = datareader["fejlprioritet"].ToString();
                    fejlDato = (DateTime)datareader["fejlDato"];
                    fejlID = (int)datareader["fejlID"];
                    
                    controller.GemAlleFejl(fejlType, fejlStacking, fejlprioritet, fejlID, fejlDato);
                }
            }

            catch (SqlException ex)
            {
                throw ex;
            }

            finally
            {   // lukke reader og connection
                if (datareader != null)
                {
                    datareader.Close();
                }

                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
            }    
        }  
    }
}
